package com.hh.service.service;

import com.hh.common.model.order.StoreOrder;
import com.hh.common.page.CommonPage;
import com.hh.common.request.CreateOrderRequest;
import com.hh.common.request.NewPreOrderRequest;
import com.hh.common.request.OrderRefundApplyRequest;
import com.hh.common.request.PageParamRequest;
import com.hh.common.response.NewOrderDetailResponse;
import com.hh.common.response.NewStoreOrderDetailInfoResponse;
import com.hh.common.response.PreOrderResponse;
import com.hh.common.vo.MyRecord;

import java.util.List;

public interface NewOrderService {

    MyRecord preOrder(NewPreOrderRequest request);

    StoreOrder getByOderId(String orderId);

    PreOrderResponse loadPreOrder(String preOrderNo);

    MyRecord createOrder(CreateOrderRequest orderRequest);

    /**
     * 创建订单
     * @param storeOrder 订单参数
     * @return 创建结果
     */
    boolean create(StoreOrder storeOrder);

    /**
     * 订单列表
     * @param type
     * @param keywords
     * @param pageRequest
     * @return
     */
    CommonPage<NewOrderDetailResponse> list(Integer type, String keywords,PageParamRequest pageRequest);

    /**
     * H5订单列表
     * @param uid 用户uid
     * @param status 评价等级|0=未支付,1=待发货,2=待收货,3=待评价,4=已完成,-3=售后/退款
     * @param pageParamRequest 分页参数
     * @return 订单结果列表
     */
    List<StoreOrder> getUserOrderList(Integer uid, Integer status, String keywords,PageParamRequest pageParamRequest);

    NewStoreOrderDetailInfoResponse detailOrder(String orderId);

    /**
     * 订单取消
     * @param orderId
     * @return
     */
    Boolean cancel(String orderId);

    Boolean doCancel(StoreOrder storeOrder,String cancelMsg);

    /**
     * 订单确认收货
     * @param orderId
     * @return
     */
    boolean take(String orderId);

    /**
     * 订单删除
     * @param orderId
     * @return
     */
    boolean del(String orderId);

    /**
     * 查看退款原因
     * @param orderId
     * @return
     */
    String showRefundInfo(String orderId);

    Boolean refundApply(OrderRefundApplyRequest request);

    /**
     * 根据属性仅仅获取一条
     * @param storeOrder 参数
     * @return 当前查询结果
     */
    StoreOrder getByEntityOne(StoreOrder storeOrder);
}
